home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Applications / QuArK / quarkpy / qtoolbar.py < prev    next >
Text File  |  2004-01-05  |  5KB  |  164 lines

  1. """   QuArK  -  Quake Army Knife
  2.  
  3. Tool Bars and Buttons
  4. """
  5. #
  6. # Copyright (C) 1996-99 Armin Rigo
  7. # THIS FILE IS PROTECTED BY THE GNU GENERAL PUBLIC LICENCE
  8. # FOUND IN FILE "COPYING.TXT"
  9. #
  10. #$Header: /cvsroot/quark/runtime/quarkpy/qtoolbar.py,v 1.4 2003/03/16 02:42:34 tiglari Exp $
  11. #
  12. import quarkx
  13. from qutils import *
  14.  
  15. # button state
  16. normal     = 0
  17. selected   = 2
  18. disabled   = 4    # can be added to the above
  19.  
  20.  
  21.  
  22. class button:
  23.     "A ToolBar button."
  24.  
  25.     #
  26.     # A button's onclick attribute must be a callback function,
  27.     # called by QuArK when the user clicks on the button.
  28.     # It will be called with the button object itself as parameter.
  29.     #
  30.  
  31.     def __init__(self, onclick, hint, iconlist, iconindex, caption=None, capalways=0, infobaselink=''):
  32.         self.onclick = onclick
  33.         self.hint = hint
  34.         self.state = normal
  35.         self.caption = caption
  36.         self.hint = hintPlusInfobaselink(hint, infobaselink)
  37.         if capalways:
  38.             self.capalways = 1
  39.         if iconindex is None:
  40.             if iconlist is None:
  41.                 self.icons = None
  42.                 self._icons = None
  43.                 self._cap = None
  44.                 return
  45.             if len(iconlist)<3:
  46.                 icon, iconmouse = iconlist
  47.                 iconsel = iconmouse
  48.             else:
  49.                 icon, iconmouse, iconsel = iconlist
  50.         else:
  51.             icon = iconlist[0][iconindex]
  52.             iconmouse = iconlist[1][iconindex]
  53.             if len(iconlist)<3:
  54.                 iconsel = iconmouse
  55.             else:
  56.                 iconsel = iconlist[2][iconindex]
  57.         self._icons = (icon, iconmouse, iconmouse, iconsel, iconsel, icon.disabledimage)
  58.         self._cap = caption
  59.         if caption:
  60.             if BtnText:
  61.                 self.icons = None
  62.             else:
  63.                 self.icons = self._icons
  64.                 if not capalways:
  65.                     self.caption = None
  66.         else:
  67.             self.icons = self._icons
  68.             self._icons = None
  69.  
  70.     def getcaption(self):
  71.         if self.caption: return self.caption
  72.         if self._cap: return self._cap
  73.         s = self.hint
  74.         try:
  75.             return s[list(s).index('|')+1:]
  76.         except:
  77.             return s
  78.  
  79.  
  80. def menubutton(menu, hint, iconlist, iconindex, infobaselink=''):
  81.     "A button that drops down a menu."
  82.  
  83.     m = button(None, hint, iconlist, iconindex, infobaselink)
  84.     m.menu = menu
  85.     return m
  86.  
  87.  
  88. def doublebutton(onclick, menu, hint, iconlist, iconindex, infobaselink=''):
  89.     "A button with both a menu and direct clicks (e.g. the grid and zoom buttons)."
  90.  
  91.     hint = hintPlusInfobaselink(hint, infobaselink)
  92.     m = button(onclick, hint, iconlist, iconindex)
  93.     m.menu = menu
  94.     return m
  95.  
  96.  
  97. def toggle(btn):
  98.     "Toggles the state of a button."
  99.     btn.state = btn.state ^ selected
  100.     quarkx.update()
  101.  
  102.  
  103. def macrobtn(macro, hint, iconlist, iconindex, caption=None, infobaselink=""):
  104.     "A button that executes a single macro command."
  105.     b = button(macroclick, hint, iconlist, iconindex, caption, infobaselink)
  106.     b.macro = macro
  107.     return b
  108.  
  109. def macroclick(b):
  110.     if not (quarkx.clickform is None):
  111.         quarkx.clickform.macro(b.macro)
  112.  
  113.  
  114. # a separator line in the toolbar
  115. sep = None
  116.  
  117. # special separators for button panels (not for toolbars)
  118. smallgap  = None
  119. widegap   = 1
  120. padright  = 2   # the next button only is sent at the right end of the line
  121. newline   = 3
  122.  
  123.  
  124. def BtnPrefChanged(level):
  125.     global BtnText
  126.     BtnText1 = quarkx.setupsubset(qutils.SS_GENERAL, "Display")["BtnText"]
  127.     if (not BtnText) == (not BtnText1):
  128.         return
  129.     BtnText = BtnText1
  130.     for f in quarkx.forms():
  131.         for tb in f.toolbars() + f.btnpanels():
  132.             for b in tb.buttons:
  133.                 if not (b in (sep, smallgap, widegap, padright, newline)):
  134.                     if BtnText:
  135.                         if b.icons is b._icons:
  136.                             b.icons = None
  137.                         if not b.caption:
  138.                             b.caption = b._cap
  139.                     else:
  140.                         if b.caption is b._cap and not hasattr(b, "capalways"):
  141.                             b.caption = None
  142.                         if b.icons is None:
  143.                             b.icons = b._icons
  144.             tb.update()
  145.  
  146. import qutils
  147. qutils.SetupRoutines.append(BtnPrefChanged)
  148. BtnText = quarkx.setupsubset(qutils.SS_GENERAL, "Display")["BtnText"]
  149.  
  150. # ----------- REVISION HISTORY ------------
  151. #
  152. #
  153. #$Log: qtoolbar.py,v $
  154. #Revision 1.4  2003/03/16 02:42:34  tiglari
  155. #Added infobaselink arg to a few more buttons
  156. #
  157. #Revision 1.3  2003/03/15 20:40:50  cdunde
  158. #To update hints and add infobase links
  159. #
  160. #Revision 1.2  2000/06/02 16:00:22  alexander
  161. #added cvs headers
  162. #
  163. #
  164. #